import matplotlib.pyplot as  plt
import pandas  as  pd
import numpy as  np

import matplotlib as mpl
mpl.use('TkAgg')  # 出图设置
plt.rcParams['font.sans-serif'] = 'SimSun'#宋体设置
plt.rcParams['axes.unicode_minus'] = False   # 字符显示

# plot折线图
# scatter散点图
# bar柱状图

# # 第一种方式
# plt.figure()
# plt.plot([1,2,3],[4,5,6])
# plt.show()
#
# # 第二种方式
# fig,ax = plt.subplots()#   list 看下都有什么内容
# ax.plot([1,2,3],[4,5,6])
# plt.show()
#
# # 第三种方式
# fig = plt.figure()  #  figure创造画布 fig
# ax = plt.axes() #  axes 创造对象(画的区域)
# ax.plot(['biejin','shanghai','shenzheng'],[1,3,5])
# plt.show()
#
# # 第四种方式
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot() # 由于 ax 这个区域在fig画布里  所以可以看成 ax 是fig 的对象
# ax.plot(['biejin','shanghai','shenzheng'],[1,3,5])
# plt.show()


# 生成画布和axes对象
# nrows=1和ncols=2分别代表1行和两列
# 分别控制左边和右边的绘图区域进行绘图

# fig,ax = plt.subplots(nrows=1,ncols=2)
# ax[0].plot([1,2,3],[4,5,6])# 第一个区域
# ax[1].scatter([1,2,3],[4,5,6])# 第二个区域
# plt.show()


#设置字体
# plt.rcParams['font.sans-serif'] = ['SimSun']
# # SimSun：宋体
# # Times New Roman
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5])
# plt.show()


#设置16px的字体大小，将标题显示在中心
# plt.rcParams['font.sans-serif'] = ['SimSun']
# fig,ax = plt.subplots()
# ax.set_title('我是标题',fontdict={'size':16},loc = 'center')
# ax.plot(['北京','上海','深圳'],[1,3,5])
# plt.show()


#边框设置
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5])
# # 只要左边和底部的边框，右边顶部隐去
# ax.spines['right'].set_visible(False)  #  set_visible(False) 是一个关键
# ax.spines['top'].set_visible(False)
# plt.show()
#
#
# #图例设置ax.legend()
# # 第一种：
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5],label='2010')
# ax.plot(['北京','上海','深圳'],[2,4,6],label='2020')
# ax.legend()
# plt.show()
# #  特别注意 plt 接口中  label如果没有  legend不起作用
#
# # 第二种：
# # 使用ax.legend()按顺序设置好图例
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5])
# ax.plot(['北京','上海','深圳'],[2,4,6])
# ax.legend(['2010','2020'])
# plt.show()


# #图形留白控制ax.margins()
#
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5])
# ax.fill_between(['北京','上海','深圳'],[1,1,1],[1,3,5],color='#7b68ee')
# # 可以设置四个方向都不留白，也可以单独设置留白的方向和宽度
# ax.margins(0.05)#自行设置
# plt.show()


# # 设置双轴坐标：ax.twinx()
# fig,ax = plt.subplots()
# ax.plot(['北京','上海','深圳'],[1,3,5],color='r')#折线图
# # plt.show()
# # 双坐标用法
# ax2 = ax.twinx()
# ax2.bar(['北京','上海','深圳'],[20,40,60],alpha=0.3)#柱状图#alpha=0.3柱状图柱子的不透明度
# plt.show()


# x轴标签--> `ax.set_xlabel()`
# y轴标签 --> `ax.set_ylabel()`
# 双轴刻度设置 --> `ax.tick_params`

# fig,ax = plt.subplots()
# ax.scatter([3,2,1],[1,3,5],color='r')
# ax.plot([3,2,1],[1,3,5],color='r')
# # fontsize设置刻度标签的大小
# # direction控制刻度是朝内还是朝外显示
# ax.tick_params(labelsize=14,direction='in')
# ax.set_xlabel("这里是x轴")
# ax.set_ylabel("我是y轴")
# plt.show()




# # 两个接口的演示
# # 读取数据
# df = pd.read_csv('./seaborn-data-master/anscombe.csv')
# dataset_1 = df[df['dataset'] == 'I']  #  找到 I 类 的
# dataset_2 = df[df['dataset'] == 'II']
# dataset_3 = df[df['dataset'] == 'III']
# dataset_4 = df[df['dataset'] == 'IV']
#
# # plt接口
# # figure()参数:
# #
# # 1. figsize：用于设置画布的尺寸，宽度、高度以英寸为单位。
# # 2. dpi：用于设置图形的分辨率。
# # 3. facecolor：用于设置画板的背景颜色。
#
# plt.figure(figsize=(10,8))  # 创建画布,用于置放子图
# plt.suptitle('四图')  # 给总画布起名字
# plt.subplot(221)  # 构建是  2行 2 列 在第一个子图绘图
# plt.plot(dataset_1['x'], dataset_1['y'], 'o')#'o'为点型，figure后就要标识点型
# plt.title('dataset_1')
# plt.subplot(222)  # 在第二个子图绘图
# plt.plot(dataset_2['x'], dataset_2['y'], 'o')
# plt.title('dataset_2')
# plt.subplot(223)
# plt.plot(dataset_3['x'], dataset_3['y'], 'o')
# plt.title('dataset_3')
# plt.subplot(224)
# plt.plot(dataset_4['x'], dataset_4['y'], 'o')
# plt.title('dataset_4')
# plt.show()


# # 面向对象接口
#
# fig  = plt.figure(figsize=(10,8))  # 创建画布,用于置放子图
# ax_1 = fig.add_subplot(221) #构建是  2行 2 列 在第一个子图绘图
# ax_2 = fig.add_subplot(222) # 第二个子图
# ax_3 = fig.add_subplot(223) #  第三个子图
# ax_4 = fig.add_subplot(224) # 第四个子图
#
#
# ax_1.plot(dataset_1['x'],dataset_1['y'],'o')  # 进行第一个轴域的画图
# ax_2.plot(dataset_2['x'],dataset_2['y'],'o')
# ax_3.plot(dataset_3['x'],dataset_3['y'],'o')
# ax_4.plot(dataset_4['x'],dataset_4['y'],'o')
#
# ax_1.set_title('dataset_1')  # 给第一个子图加上标题
# ax_2.set_title('dataset_2')
# ax_3.set_title('dataset_3')
# ax_4.set_title('dataset_4')
#
# fig.suptitle('Ancombe data') # 给整幅图添加一个大标题
# fig.tight_layout()   #  使其格局紧凑
# plt.show()

# 有一些不一致的接口：
#
# - plt.subplot()——fig.add_subplot()
# - plt.xlabel()——axes.set_xlabel()
# - plt.ylabel()——axes.set_ylabel()
# - plt.title()——axes.set_title()


# # color设置颜色
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot()
# x = ['北京','上海','深圳']
# y = np.array([1,3,5])
# ax.plot(x,y)
# ax.plot(x,y + 3,color='blue')  # # 通过颜色名称指定
# ax.plot(x,y + 2,color='g')   # 通过颜色简写名称指定
# ax.plot(x,y + 1,color='#FFDD44') # 16进制的RRGGBB值
# plt.show()


# #linestyle连线设置，只能支持如下四种参数
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot()
# x = ['北京','上海','深圳']
# y = np.array([1,3,5])
# ax.plot(x,y)
# ax.plot(x,y + 3,color='blue',linestyle='-') # 实线
# ax.plot(x,y + 2,color='r',linestyle='--')  # 虚线
# ax.plot(x,y + 1,color='#FFDD44',linestyle='-.') # 长短点虚线
# ax.plot(x,y + 0.5, linestyle=':');  # 点线
# plt.show()


# #  更简洁的代码，这些linestyle和color参数能够合并成一个非关键字参数，传递给plt.plot()函数：
# import numpy  as  np
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot()
# x = ['北京','上海','深圳']
# y = np.array([1,3,5])
# ax.plot(x, y + 3, '-.k') # 黑色长短点虚线
# ax.plot(x,y + 2,'-g')  # 绿色实线
# plt.show()


# # 坐标轴范围：
# # 使用plt.xlim()和plt.ylim()函数可以调整坐标轴的范围
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot()
# x = np.array([0,1,3])
# y = np.array([1,3,5])
# ax.plot(x, y + 3, '-.k') # 黑色长短点虚线
# ax.plot(x,y + 2,'-g',marker = 'v')  # 绿色实线plt.xlim(10, 0)
# plt.xlim(0,3) # 0-3   是 plt特有的方法
# plt.ylim(3,9)  # 3 - 9
# plt.show()

# # axis
# fig = plt.figure()  #  figure创造画布 fig
# ax = fig.add_subplot()
# x = np.array([0,1,3])
# y = np.array([1,3,5])
# ax.plot(x, y + 3, '-.k') # 黑色长短点虚线
# ax.plot(x,y + 2,'-g',marker = 'v')  # 绿色实线plt.xlim(10, 0)
# #相关的函数还有plt.axis()这个函数可以在一个函数调用中就完成 x 轴和 y 轴范围的设置，传递一个[xmin, xmax, ymin, ymax]的列表参数即可：
# plt.axis([0,3, 1, 9])  # [xmin, xmax, ymin, ymax]
# plt.show()


# # 演示案例
# plt.figure()  # 创建画布
# plt.rcParams['font.sans-serif'] = 'SimHei'  # 字体是中文
# plt.rcParams['axes.unicode_minus'] = False  # 特殊字符也会显示
#
# x = list(range(1, 8))  # x轴的数值  列表的形式
# y_zz = [15, 20, 22, 23, 20, 18, 16]  # 郑州的温度
#
# y_cc = [-10, -8, -12, -10., -8, -6, -1]  # 长春的温度
#
# plt.plot(
#     x,  # X轴
#     y_zz,  # Y轴
#     color='r',  # 红色的折线
#     linestyle=':',  # 断虚线
#     linewidth=1.2,  # 线条宽度
#     marker='*',  # 星号
#     markersize=7,  # 点的大小
#     markerfacecolor='b',  # 点的颜色蓝色
# )
# plt.plot(
#     x,
#     y_cc,
#     color='k',  # 黑色的折线
#     linestyle='-.',  # 点线
#     linewidth=1.9,
#     marker='d',
#     markersize=7,
#     markerfacecolor='b',
# )
#
# plt.title('郑州和长春的天气走势')  # 设置标题
#
# plt.xlabel('日期')  # x 轴的名字
# plt.ylabel('温度(℃)')  # y轴的名字
#
# plt.legend(['郑州温度', '长春温度'], loc=4)  # 图例的名字和放置的位置
#
# #   修改X Y的 值
# xticks = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
# # 修改横轴刻度,如果需要中文替换刻度 参数1 是将要被替换的序号,参数2  被替换的中文
# plt.xticks(x, xticks, rotation=45)  # x  是被替换的值
# yticks = list(range(-15, 35, 5))  # 每5个为一组
# plt.yticks(yticks)  # 修改纵轴刻度 没有替换所以不加第二个参数.
#
# for i, j in zip(x, y_zz):
#     """
#     # print(i, j) 看下结果
#     进行标注调用text函数
#     参数1 : 标记的x轴位置
#     参数2 : 标记的y轴位置  # 可以适当的 +  - 数字来调整标志的美观程度
#     参数3 : 标记的标志水平居中
#     """
#     print(i, j)
#
#     plt.text(i, j + 1, '%d℃' % j, horizontalalignment='center')  # ha = 'center'
#
# for i, j in zip(x, y_cc):
#     plt.text(i, j + 1, '%d℃' % j, horizontalalignment='center')
#
# plt.show()  # 调用show方法进行展示
# list(zip(x, y_zz))

